// #include <stdio.h>
// #include <unistd.h>
// #include <sys/types.h>
// #include <sys/wait.h>

// int main()
// {
//     pid_t id = fork();
//     if (id == 0)
//     {
//         printf("child process,pid=%d\n", getpid());
//         sleep(5);
//         // int a=5;
//         // a/=0;
//         return 0;
//     }
//     else
//     {
//         int status = 0;
//         int ret = wait(&status);
//         printf("wait over,pid=%d,status=%d\n", ret, status);
//         int sig = status & 0x7f;
//         int coredump = WCOREDUMP(status);
//         int code = WEXITSTATUS(status);
//         if (WIFEXITED(status))
//         {
//             printf("child process exit normally, sig=%d, coredump=%d, code=%d,\n", sig, coredump, code);
//         }
//         else
//         {
//             printf("child process exit abnormally, sig=%d, coredump=%d, code=%d,\n", sig, coredump, code);
//         }
//         return 0;
//     }
// }


// #include<stdio.h>
// #include<unistd.h>

// int main()
// {
//     printf("pid=%d\n", getpid());
//     execl("/bin/ls","ls","-la",NULL);
//     printf("This line should not be printed");

//     return 0;
// }

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

int main() {
    pid_t pid = fork();

    if (pid == 0) {
        // 子进程，调用 exit(-1)
        exit(-1);
    } else {
        // 父进程
        int status;
        waitpid(pid, &status, 0); // 等待子进程结束

        if (WIFEXITED(status)) {
            printf("Child exited with code: %d\n", WEXITSTATUS(status)); // 输出 255
        }
    }

    exit(-1);
    return 0;
}